<?php
require_once('lanceur_spip.php');
include_spip('functions/pdk_common');
//require_once(_DIR_PLUGIN_PDK.'classes/pdk_model.php');
//require_once(_DIR_PLUGIN_PDK.'classes/models/PdkAuteurModel.php');
require_once(_DIR_PLUGIN_PDK.'classes/simpletest/class.PdkModelTest.php');
/**
 *  pdkAuteurModel class test case
 */
class TestClassPdkAuteurModel extends PdkModelTest {
    /**
     * PdkAuteurModel
     */
    private $aut_mdl;
    
    public function __construct(){
        parent::__construct();
        $this->SetPdkModel('PdkAuteurModel', pdk_load_class('PdkAuteurModel', 'classes/models'));
        $this->aut_mdl = $this->model;
        $this->dropTestTables = false;
    }
    
    /**
     *  Run before each test
     */
    function setUp() {
        parent::setUp();
    }
    
    /**
     *  Run after each test
     */
    function tearDown() {
        parent::tearDown();
    }
    
    function __destruct() {
        parent::__destruct(); 
    }    
    
    /**
     *  Auteur insert test
     *  NB: Небезопасный тест (использует оригинальную таблицу spip_auteurs)!
     */
    function testInsert() {
        $data['nom'] = 'Test';
        $data['statut'] = 'test';
        $data['login'] = 'test'; // Чтобы изменить пароль в данных должен быть и логин!
        $data['pass'] = '123456789'; // Пароль должен быть >= 6 символов        
        
        $aut_mod = new PdkAuteurModel();
        $id_auteur = $aut_mod->insert($data);
        $auteur = sql_fetch_all(sql_select('*', 'spip_auteurs', 'id_auteur='.$id_auteur));
        $this->assertTrue(count($auteur) == 1);
        sql_delete('spip_auteurs', 'id_auteur='.$id_auteur);
    }
    
    /**
     *  Auteur update test
     *  NB: Небезопасный тест (использует оригинальную таблицу spip_auteurs)!
     */
    function testUpdate() {
        $data['nom'] = 'Test';
        $data['statut'] = 'test';
        $data['login'] = 'test'; // Чтобы изменить пароль в данных должен быть и логин!
        $data['pass'] = '1234567'; // Пароль должен быть >= 6 символов        
        
        $id_auteur = sql_insertq('spip_auteurs', $data);
        
        $data_update['nom'] = 'Test2';
        $data_update['statut'] = 'test2';
        $data_update['login'] = 'test2'; // Чтобы изменить пароль в данных должен быть и логин!
        $data_update['pass'] = '1234567890'; // Пароль должен быть >= 6 символов        
        
        $aut_mod = new PdkAuteurModel();
        $aut_mod->update('id_auteur='.$id_auteur, $data_update);        
        
        $auteur = sql_fetch_all(sql_select('*', 'spip_auteurs', 'id_auteur='.$id_auteur));
        $auteur = $auteur[0];
        $data_check['nom'] = $auteur['nom']; 
        $data_check['statut'] = $auteur['statut'];
        $data_check['login'] = $auteur['login'];
        unset($data_update['pass']); 
        
        $this->assertEqual($data_update, $data_check);
        sql_delete('spip_auteurs', 'id_auteur='.$id_auteur);
    }
    // Не знаю как написать тест для проверки логина. Надо найти функцию, которая проверяет пароль для автора или логина.
    
    function testCreateLoginFromName(){
        $name = 'Вася Петров';
        $login_check = 'VasyaPetrov';
        $login = $this->aut_mdl->CreateLoginFromName($name);
        $this->assertEqual($login_check, $login);        
    }
    
    function testCreatePassword(){
        $pass = $this->aut_mdl->CreatePassword();
        $this->assertEqual(7, strlen($pass));
        $pass = $this->aut_mdl->CreatePassword(10);
        $this->assertEqual(10, strlen($pass));
    }
    /*
    function testCheckAuteurExist(){
        $login = 'TestCheckAuteurExist';
        $email = 'testcheckauteurexist@test.com';
        $data['nom'] = 'Test';
        $data['email'] = $email;
        $data['statut'] = 'test';
        $data['login'] = $login; // Чтобы изменить пароль в данных должен быть и логин!
        $data['pass'] = '123456789'; // Пароль должен быть >= 6 символов
        
        $id_auteur = $this->aut_mdl->insert($data); //var_dump($id_auteur); exit;        
        $exist = $this->aut_mdl->CheckAuteurExist($login, $email);
        $this->assertTrue($exist);
        $exist = $this->aut_mdl->CheckAuteurExist($login);
        $this->assertTrue($exist);
        $exist = $this->aut_mdl->CheckAuteurExist(false,$email);
        $this->assertTrue($exist);
        $exist = $this->aut_mdl->CheckAuteurExist($login, $email, 'test');
        $this->assertTrue($exist);        
        
        $this->aut_mdl->delete_by_id($id_auteur);
        $exist = $this->aut_mdl->CheckAuteurExist($login, $email);
        $this->assertFalse($exist);         
        $exist = $this->aut_mdl->CheckAuteurExist($login);
        $this->assertFalse($exist);
        $exist = $this->aut_mdl->CheckAuteurExist(false,$email);
        $this->assertFalse($exist);
        $exist = $this->aut_mdl->CheckAuteurExist($login, $email, 'test');
        $this->assertFalse($exist);
    }*/
}
